{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\mpl_finance.py:16: DeprecationWarning: \n",
      "\n",
      "  =================================================================\n",
      "\n",
      "   WARNING: `mpl_finance` is deprecated:\n",
      "\n",
      "    Please use `mplfinance` instead (no hyphen, no underscore).\n",
      "\n",
      "    To install: `pip install --upgrade mplfinance` \n",
      "\n",
      "   For more information, see: https://pypi.org/project/mplfinance/\n",
      "\n",
      "  =================================================================\n",
      "\n",
      "  __warnings.warn('\\n\\n  ================================================================='+\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from datetime import datetime\n",
    "from influxdb import InfluxDBClient\n",
    "import talib as  ta\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from matplotlib.dates import DateFormatter, \\\n",
    "WeekdayLocator, DayLocator, MONDAY, date2num\n",
    "from datetime import datetime\n",
    "\n",
    "from mpl_finance import candlestick_ohlc\n",
    "from matplotlib import pyplot as plt\n",
    "from mpl_finance import candlestick_ohlc\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "client = InfluxDBClient('192.168.3.108',8086)\n",
    "\n",
    "dbname = \"KlineIndex\"\n",
    "sqlday = \"select * from KlineDay where symbol='HSI' and  time > '2010-01-01 00:00:00'\"\n",
    "\n",
    "rsday = client.query(sqlday, database=dbname)\n",
    "query = rsday.get_points()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>open</th>\n",
       "      <th>preclose</th>\n",
       "      <th>symbol</th>\n",
       "      <th>value</th>\n",
       "      <th>vol</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-04 00:00:00+00:00</th>\n",
       "      <td>2010-01-04T00:00:00Z</td>\n",
       "      <td>21823.28</td>\n",
       "      <td>22024.83</td>\n",
       "      <td>21689.22</td>\n",
       "      <td>21860.04</td>\n",
       "      <td>21872.50</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48509170000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-05 00:00:00+00:00</th>\n",
       "      <td>2010-01-05T00:00:00Z</td>\n",
       "      <td>22279.58</td>\n",
       "      <td>22297.04</td>\n",
       "      <td>21987.27</td>\n",
       "      <td>22092.15</td>\n",
       "      <td>21823.28</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>82973500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-06 00:00:00+00:00</th>\n",
       "      <td>2010-01-06T00:00:00Z</td>\n",
       "      <td>22416.67</td>\n",
       "      <td>22514.79</td>\n",
       "      <td>22277.13</td>\n",
       "      <td>22357.46</td>\n",
       "      <td>22279.58</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>91328340000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-07 00:00:00+00:00</th>\n",
       "      <td>2010-01-07T00:00:00Z</td>\n",
       "      <td>22269.45</td>\n",
       "      <td>22548.03</td>\n",
       "      <td>22169.61</td>\n",
       "      <td>22548.03</td>\n",
       "      <td>22416.67</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>79167640000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-08 00:00:00+00:00</th>\n",
       "      <td>2010-01-08T00:00:00Z</td>\n",
       "      <td>22296.75</td>\n",
       "      <td>22443.22</td>\n",
       "      <td>22206.16</td>\n",
       "      <td>22282.75</td>\n",
       "      <td>22269.45</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>71931720000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           Date     close      high       low  \\\n",
       "Date                                                                            \n",
       "2010-01-04 00:00:00+00:00  2010-01-04T00:00:00Z  21823.28  22024.83  21689.22   \n",
       "2010-01-05 00:00:00+00:00  2010-01-05T00:00:00Z  22279.58  22297.04  21987.27   \n",
       "2010-01-06 00:00:00+00:00  2010-01-06T00:00:00Z  22416.67  22514.79  22277.13   \n",
       "2010-01-07 00:00:00+00:00  2010-01-07T00:00:00Z  22269.45  22548.03  22169.61   \n",
       "2010-01-08 00:00:00+00:00  2010-01-08T00:00:00Z  22296.75  22443.22  22206.16   \n",
       "\n",
       "                               open  preclose symbol  value          vol  \n",
       "Date                                                                      \n",
       "2010-01-04 00:00:00+00:00  21860.04  21872.50    HSI    0.0  48509170000  \n",
       "2010-01-05 00:00:00+00:00  22092.15  21823.28    HSI    0.0  82973500000  \n",
       "2010-01-06 00:00:00+00:00  22357.46  22279.58    HSI    0.0  91328340000  \n",
       "2010-01-07 00:00:00+00:00  22548.03  22416.67    HSI    0.0  79167640000  \n",
       "2010-01-08 00:00:00+00:00  22282.75  22269.45    HSI    0.0  71931720000  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_hsi = pd.DataFrame(query)\n",
    "df_hsi = df_hsi.rename(columns={'time':'Date'})\n",
    "df_hsi.index = pd.to_datetime(df_hsi['Date'], format=\"%Y-%m-%d\")\n",
    "df_hsi.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime64[ns, UTC]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_hsi.index.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def candlePlot(seriesData, title=\"a\"):\n",
    "    Date = [date2num(date) for date in seriesData.index]\n",
    "    seriesData.loc[:, 'Date'] = Date\n",
    "    \n",
    "    # 将DF转成list\n",
    "    listData = []\n",
    "    for i in range(len(seriesData)):\n",
    "        a = [seriesData.Date[i], \\\n",
    "            seriesData.open[i], seriesData.high[i],\\\n",
    "            seriesData.low[i], seriesData.close[i]]\n",
    "        listData.append(a)\n",
    "        \n",
    "    # 设定绘制参数\n",
    "    ax = plt.subplot()\n",
    "    mondays = WeekdayLocator(MONDAY)\n",
    "    weekFormatter = DateFormatter(\"%y %b %d\")\n",
    "    ax.xaxis.set_major_locator(mondays)\n",
    "    ax.xaxis.set_minor_locator(DayLocator())\n",
    "    ax.xaxis.set_major_formatter(weekFormatter)\n",
    "    \n",
    "    # 调用candlestick_oblc \n",
    "    candlestick_ohlc(ax, listData, width=0.7, \\\n",
    "                    colorup='r', colordown='g')\n",
    "    plt.setp(plt.gca().get_xticklabels(), \\\n",
    "                    rotation = 50, horizontalalignment='center')\n",
    "    return(plt.show())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n",
      "Locator attempting to generate 4698 ticks ([733563.0, ..., 738260.0]), which exceeds Locator.MAXTICKS (1000).\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "candlePlot(df_hsi, 'hsi')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2010-01-04 00:00:00+00:00    -36.76\n",
       "2010-01-05 00:00:00+00:00    187.43\n",
       "2010-01-06 00:00:00+00:00     59.21\n",
       "2010-01-07 00:00:00+00:00   -278.58\n",
       "2010-01-08 00:00:00+00:00     14.00\n",
       "dtype: float64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ClOp = df_hsi.close - df_hsi.open\n",
    "ClOp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count     32.000000\n",
       "mean      -6.886875\n",
       "std      233.623548\n",
       "min     -471.510000\n",
       "25%     -136.442500\n",
       "50%      -65.675000\n",
       "75%      159.457500\n",
       "max      354.760000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ClOp.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "open = df_hsi.open\n",
    "close = df_hsi.close"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "Shape=[0,0,0]\n",
    "\n",
    "lag1ClOp = ClOp.shift(1)\n",
    "lag2ClOp = ClOp.shift(2)\n",
    "\n",
    "for i in range(3, len(ClOp)):\n",
    "    if all([lag2ClOp[i] < -11, abs(lag1ClOp[i])<2, \\\n",
    "           ClOp[i] > 6, abs(ClOp[i]) > abs(lag2ClOp[i] * 0.5)]):\n",
    "        Shape.append(1)\n",
    "    else:\n",
    "        Shape.append(0)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "412"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Shape.index(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "306"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 寻找十字星的位置\n",
    "lagOpen = open.shift(1)\n",
    "lagClose = close.shift(1)\n",
    "lag2Close = close.shift(2)\n",
    "\n",
    "Doji = [0,0,0]\n",
    "for i in range(3, len(open), 1):\n",
    "    if all([lagOpen[i] < open[i], lagOpen[i] < lag2Close[i], \\\n",
    "           lagClose[i] < open[i], (lagClose[i] < lag2Close[i])]):\n",
    "        Doji.append(1)\n",
    "    else:\n",
    "        Doji.append(0)\n",
    "Doji.count(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 下跌趋势\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
